// 程序六：标准输入输出演示
const readline = require('readline');

console.log('=== 用户信息输入系统 ===');

// 创建readline接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 用户信息对象
const userInfo = {};

// 问题列表
const questions = [
    { key: 'name', prompt: '请输入您的姓名: ' },
    { key: 'email', prompt: '请输入您的邮箱: ' },
    { key: 'qq', prompt: '请输入您的QQ号: ' },
    { key: 'phone', prompt: '请输入您的手机号码: ' }
];

let currentQuestionIndex = 0;

// 验证函数
function validateInput(key, value) {
    switch (key) {
        case 'name':
            return value.trim().length > 0 ? null : '姓名不能为空';
        case 'email':
            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            return emailRegex.test(value) ? null : '邮箱格式不正确';
        case 'qq':
            const qqRegex = /^\d{5,11}$/;
            return qqRegex.test(value) ? null : 'QQ号必须是5-11位数字';
        case 'phone':
            const phoneRegex = /^1[3-9]\d{9}$/;
            return phoneRegex.test(value) ? null : '手机号码格式不正确';
        default:
            return null;
    }
}

// 询问下一个问题
function askNextQuestion() {
    if (currentQuestionIndex >= questions.length) {
        // 所有问题都问完了，显示结果
        displayUserInfo();
        rl.close();
        return;
    }
    
    const currentQuestion = questions[currentQuestionIndex];
    rl.question(currentQuestion.prompt, (answer) => {
        const validationError = validateInput(currentQuestion.key, answer);
        
        if (validationError) {
            console.log(`错误: ${validationError}`);
            console.log('请重新输入\n');
            // 重新询问当前问题
            askNextQuestion();
        } else {
            // 输入有效，保存到对象中
            userInfo[currentQuestion.key] = answer.trim();
            currentQuestionIndex++;
            console.log('✓ 输入成功\n');
            // 询问下一个问题
            askNextQuestion();
        }
    });
}

// 显示用户信息
function displayUserInfo() {
    console.log('\n=== 用户信息汇总 ===');
    console.log('姓名:', userInfo.name);
    console.log('邮箱:', userInfo.email);
    console.log('QQ号:', userInfo.qq);
    console.log('手机号码:', userInfo.phone);
    
    console.log('\n=== 完整对象信息 ===');
    console.log(JSON.stringify(userInfo, null, 2));
    
    console.log('\n=== 对象详细信息 ===');
    console.log('对象类型:', typeof userInfo);
    console.log('对象键值对:');
    Object.entries(userInfo).forEach(([key, value]) => {
        console.log(`  ${key}: ${value} (${typeof value})`);
    });
    
    console.log('\n=== 数据统计 ===');
    console.log('总字段数:', Object.keys(userInfo).length);
    console.log('总字符数:', JSON.stringify(userInfo).length);
    
    // 显示一些额外的处理
    console.log('\n=== 数据处理示例 ===');
    console.log('姓名长度:', userInfo.name.length);
    console.log('邮箱域名:', userInfo.email.split('@')[1]);
    console.log('QQ号长度:', userInfo.qq.length);
    console.log('手机号前三位:', userInfo.phone.substring(0, 3));
}

// 处理程序退出
rl.on('close', () => {
    console.log('\n程序结束，感谢使用！');
    process.exit(0);
});

// 处理Ctrl+C
rl.on('SIGINT', () => {
    console.log('\n\n程序被用户中断');
    rl.close();
});

// 开始询问
console.log('请按照提示输入您的信息：\n');
askNextQuestion();
